package Persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import Clases.Comida;

public class DAOComida
{
	private static DAOComida pool;
	
	private DAOComida(){
	}	
	
	public static DAOComida getInstancia()
	{
		if (pool == null)
			return pool = new DAOComida();
		return pool;
	}
	
	@SuppressWarnings("static-access")
	public void insert(Comida c)
	{
		Connection con = PoolConnection.getPoolConnection().getConnection();
		try
		{
			String senten = "INSERT INTO [TPOAPI].[dbo].[Comida] (nombre, idReceta, nomSeccion, tipoComida, activo) VALUES (?,?,?,?,?)" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, c.getNombre());
			ps.setInt(2, c.getReceta().getIdReceta());
			ps.setString(3, c.getSeccionCocina().getNombre());
			ps.setString(4, c.getTipoComida());
			ps.setInt(5, c.getActivo());
			ps.execute();			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Producto: " + e.getStackTrace());
				
	      }
	      
	}
	public void update(Comida c)
	{
		Connection con = PoolConnection.getPoolConnection().getConnection();
		try {
			String senten = "UPDATE [TPOAPI].[dbo].[Comida] set TipoComida = ? where Nombre = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, c.getTipoComida());
			ps.setString(2, c.getNombre());
			ps.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Modificar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Modificar Producto: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	}
	public void delete (Comida c)
	{
		Connection con = PoolConnection.getPoolConnection().getConnection();
		try {
			//Preparar sentencia insert en tabla destino
			String senten = "UPDATE [TPOAPI].[dbo].[Comida] set Activo = ? where nombre = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,c.getActivo());
			ps.setString(2, c.getNombre());
			ps.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	   catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Eliminar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Eliminar Producto: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);				
	      }

	}
	@SuppressWarnings("static-access")
	public Comida buscarComida (String nombre)
	{
		Connection con = PoolConnection.getPoolConnection().getConnection();
		Comida c = null;
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT * from [TPOAPI].[dbo].[Comida] where nombre = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,nombre);
			ResultSet result = ps.executeQuery();
			while(result.next())
			{
				c = new Comida();
				c.setNombre(result.getString("Nombre"));
				//DAO SECCION TIENE QUE DEVOLVERME 
				System.out.println(result.getString("nomSeccion"));
				c.setSeccion(DAOSeccion.getInstancia().buscarSeccion(result.getString("nomSeccion")));
				c.setReceta(DAOReceta.getInstancia().buscarReceta(result.getInt("idReceta")));
				c.setPrecio(c.getReceta().getPrecio());
				c.setActivo(result.getInt("Activo"));
				c.setTipoComida(result.getString("TipoComida"));				
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return c;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Buscar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Buscar Cliente: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return c;
	}
	@SuppressWarnings("static-access")
	public Vector<Comida> buscarTodasComidas()
	{
		Connection con = PoolConnection.getPoolConnection().getConnection();	
		Vector<Comida> vec = new Vector<Comida>();
		Comida c = null;
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT * from [TPOAPI].[dbo].[Comida]" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ResultSet result = ps.executeQuery();
			while(result.next())
			{
				c = new Comida();
				c.setNombre(result.getString("Nombre"));
				//DAO SECCION TIENE QUE DEVOLVERME UNA SECCION!
				c.setSeccion(DAOSeccion.getInstancia().buscarSeccion(result.getString("NomSeccion")));
				c.setReceta(DAOReceta.getInstancia().buscarReceta(result.getInt("idReceta")));
				c.setPrecio(c.getReceta().getPrecio());
				c.setActivo(result.getInt("Activo"));
				c.setTipoComida(result.getString("TipoComida"));
				vec.add(c);
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return vec;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Buscar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Buscar Cliente: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return vec;
	}	
}
